const express = require('express');
const { param, query } = require('express-validator');
const MessageController = require('../../controllers/MessageController');
const { authenticateJWT } = require('../../middleware/auth');

const router = express.Router();

// 所有消息相关接口都需要认证
router.use(authenticateJWT);

/**
 * 获取用户消息列表
 * @route GET /api/messages
 * @param {string} [type] - 消息类型：like(点赞消息)、comment(评论消息)，可选
 * @param {number} [page=1] - 页码，默认1
 * @param {number} [limit=20] - 每页数量，默认20
 */
router.get('/', [
  query('type').optional().isIn(['like', 'comment']).withMessage('消息类型必须是like或comment'),
  query('page').optional().isNumeric().withMessage('页码必须是数字'),
  query('limit').optional().isNumeric().withMessage('每页数量必须是数字')
], MessageController.getUserMessages);

/**
 * 获取用户未读消息数量
 * @route GET /api/messages/unread/count
 * @param {string} [type] - 消息类型：like(点赞消息)、comment(评论消息)，可选
 */
router.get('/unread/count', [
  query('type').optional().isIn(['like', 'comment']).withMessage('消息类型必须是like或comment')
], MessageController.getUnreadCount);

/**
 * 标记单条消息为已读
 * @route PUT /api/messages/:id/read
 * @param {number} id - 消息ID
 */
router.put('/:id/read', [
  param('id').isNumeric().withMessage('消息ID必须是数字')
], MessageController.markAsRead);

/**
 * 标记所有消息为已读
 * @route PUT /api/messages/read-all
 * @param {string} [type] - 消息类型：like(点赞消息)、comment(评论消息)，可选
 */
router.put('/read-all', [
  query('type').optional().isIn(['like', 'comment']).withMessage('消息类型必须是like或comment')
], MessageController.markAllAsRead);

/**
 * 删除消息
 * @route DELETE /api/messages/:id
 * @param {number} id - 消息ID
 */
router.delete('/:id', [
  param('id').isNumeric().withMessage('消息ID必须是数字')
], MessageController.deleteMessage);

module.exports = router;